home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / share / eselect / modules / lapack.eselect < prev    next >
Text File  |  2006-04-12  |  7KB  |  288 lines

  1. # Copyright 1999-2005 Gentoo Foundation
  2. # Distributed under the terms of the GNU General Public License v2
  3. # $Id: lapack.eselect 249 2005-12-19 00:43:49Z kugelfang $
  4.  
  5. inherit config multilib portage
  6.  
  7. DESCRIPTION="Manage installed LAPACK implementations"
  8. MAINTAINER="Danny van Dyk <kugelfang@gentoo.org>"
  9. SVN_DATE='$Date: 2005-12-19 00:43:49 +0000 (Mon, 19 Dec 2005) $'
  10. VERSION=$(svn_date_to_version "${SVN_DATE}")
  11.  
  12. LAPACK_CONFIG="${ROOT}/var/lib/eselect/lapack/lapack.config"
  13. LAPACK_IMPLEMENTATIONS="ACML ATLAS MKL72 reference"
  14. LAPACK_PROFILES="F77"
  15.  
  16. # check_* $libdir
  17. # implementation specific check functions
  18. check_ACML() {
  19.     # libacml.so provides FORTRAN 77 support
  20.     [[ -f ${1}/libacml.so ]] && echo "F77"
  21. }
  22.  
  23. check_ATLAS() {
  24.     [[ -d ${1}/lapack/atlas ]] || return
  25.     [[ -f ${1}/lapack/atlas/liblapack.so ]] && echo "F77"
  26. }
  27.  
  28. check_MKL72() {
  29.     local dir
  30.     case $(arch) in
  31.         amd64)    dir="em64t";;
  32.         ia64)    dir="64";;
  33.         x86)    dir="32";;
  34.     esac
  35.     [[ -f ${ROOT}/opt/intel/mkl72/lib/${dir}/libmkl.so ]] && echo "F77"
  36. }
  37.  
  38. check_reference() {
  39.     [[ -d ${1}/lapack/reference ]] || return
  40.     [[ -f ${1}/lapack/reference/liblapack.so ]] && echo "F77"
  41. }
  42.  
  43. # package $impl
  44. # Prints the name of the package providing $impl
  45. package() {
  46.     case ${1} in
  47.         ACML)        echo "sci-libs/ACML";;
  48.         ATLAS)        echo "sci-libs/lapack-atlas";;
  49.         MKL*)        echo "sci-libs/mkl";;
  50.         reference)    echo "sci-libs/lapack-reference";;
  51.         *) ;;
  52.     esac
  53. }
  54.  
  55. # is_active_* $lib
  56. # return 0 if $lib points to an active LAPACK implementation of profile *
  57. is_active_ACML() {
  58.     [[ -L ${1} ]] || return 1
  59.     local lib=$(readlink -sn ${1})
  60.     [[ $(basename ${lib}) == libacml.so ]] \
  61.         && return 0
  62.     return 1
  63. }
  64.  
  65. is_active_ATLAS() {
  66.     [[ -L ${1} ]] || return 1
  67.     local lib=$(readlink -sn ${1})
  68.     local dir=${lib%/*}
  69.     [[ ${dir##*/} == atlas ]] \
  70.         && return 0
  71.     return 1
  72. }
  73.  
  74. is_active_MKL() {
  75.     [[ -L ${1} ]] || return 1
  76.     local lib=$(readlink -sn ${1})
  77.     [[ $(basename ${lib}) == libmkl.so ]] \
  78.         && return 0
  79.     return 1
  80. }
  81.  
  82. is_active_MKL72() {
  83.     is_active_MKL $@
  84. }
  85.  
  86. is_active_reference() {
  87.     [[ -L ${1} ]] || return 1
  88.     local lib=$(readlink -sn ${1})
  89.     local dir=${lib%/*}
  90.     [[ ${dir##*/} == reference ]] \
  91.         && return 0
  92.     return 1
  93. }
  94.  
  95. # setup_* $libdir $profile
  96. # Implementation specific activation/setup functions
  97. setup_ACML() {
  98.     if [[ ${2} == F77 ]] ; then
  99.         ln -sf ${1}/libacml.so ${1}/liblapack.so
  100.         ln -sf ${1}/libacml.so ${1}/liblapack.so.0
  101.         ln -sf ${1}/libacml.a  ${1}/liblapack.a
  102.     else
  103.         die "Illegal profile: ${2}"
  104.     fi
  105. }
  106.  
  107. setup_ATLAS() {
  108.     if [[ ${2} == F77 ]] ; then
  109.         ln -sf ${1}/lapack/atlas/liblapack.so ${1}/liblapack.so
  110.         ln -sf ${1}/lapack/atlas/liblapack.so ${1}/liblapack.so.0
  111.         ln -sf ${1}/lapack/atlas/liblapack.a  ${1}/liblapack.a
  112.     else
  113.         die "Illegal profile: ${2}"
  114.     fi
  115. }
  116.  
  117. setup_MKL72() {
  118.     local dir
  119.     case $(arch) in
  120.         amd64)    dir="em64t";;
  121.         ia64)    dir="64";;
  122.         x86)    dir="32";;
  123.     esac
  124.     if [[ ${2} == F77 ]] ; then
  125.         ln -sf ${ROOT}/opt/intel/mkl72/lib/${dir}/libmkl.so \
  126.             ${1}/liblapack.so
  127.         ln -sf ${ROOT}/opt/intel/mkl72/lib/${dir}/libmkl.so \
  128.             ${1}/liblapack.so.0
  129.         rm ${1}/liblapack.a &> /dev/null
  130.     else
  131.         die "Illegal profile: ${2}"
  132.     fi
  133. }
  134.  
  135. setup_reference() {
  136.     if [[ ${2} == F77 ]] ; then
  137.         ln -sf ${1}/lapack/reference/liblapack.so ${1}/liblapack.so
  138.         ln -sf ${1}/lapack/reference/liblapack.so ${1}/liblapack.so.0
  139.         ln -sf ${1}/lapack/reference/liblapack.a  ${1}/liblapack.a
  140.     else
  141.         die "Illegal profile: ${2}"
  142.     fi
  143. }
  144.  
  145. ### list action ###
  146.  
  147. describe_list() {
  148.     echo "List all installed LAPACK implementations"
  149. }
  150.  
  151. do_list() {
  152.     local libdirs libdir x
  153.     [[ -z "$@" ]] \
  154.         && libdirs="$(list_libdirs)" \
  155.         || libdirs="$@"
  156.  
  157.     [[ -f ${LAPACK_CONFIG} ]] \
  158.         || eselect lapack scan
  159.  
  160.     for libdir in ${libdirs} ; do
  161.         F77_PROFILES=$(load_config ${LAPACK_CONFIG} F77_${libdir})
  162.         if [[ -n ${F77_PROFILES} ]] ; then
  163.             write_list_start "FORTRAN 77 profiles in ${ROOT}/usr/${libdir}"
  164.             for x in ${F77_PROFILES} ; do
  165.                     active=''
  166.                     is_active_${x} ${ROOT}/usr/${libdir}/liblapack.so \
  167.                         && active=' *'
  168.                     write_kv_list_entry ${x} \
  169.                         "($(package ${x}))$(highlight "${active}")"
  170.             done
  171.             echo
  172.         fi
  173.     done
  174. }
  175.  
  176. ### select action ###
  177.  
  178. describe_set() {
  179.     echo "Setup one of the installed LAPACK implementations as the active implementation"
  180. }
  181.  
  182. do_set() {
  183.     local libdirs=$(list_libdirs) profiles=${LAPACK_PROFILES} impl libdir prof
  184.     [[ ${#1} == 0 ]] \
  185.         && die -q "Please specify the implementation to setup as active."
  186.     impl=${1}
  187.     shift
  188.  
  189.     [[ -f ${LAPACK_CONFIG} ]] \
  190.         || eselect lapack scan
  191.  
  192.     has ${impl} ${LAPACK_IMPLEMENTATIONS} \
  193.         || die -q "Illegal implementation: ${impl}"
  194.  
  195.     for param in ${@} ; do
  196.         if has ${param} ${libdirs} ; then
  197.             mylibdirs=(${mylibdirs[@]} ${param})
  198.         elif has ${param} ${LAPACK_PROFILES} ; then
  199.             myprofiles=(${myprofiles[@]} ${param})
  200.         else
  201.             die -q "Illegal parameter: ${param}."
  202.         fi
  203.     done
  204.     [[ -n ${mylibdirs[@]} ]] && libdirs=${mylibdirs[@]}
  205.     [[ -n ${myprofiles[@]} ]] && profiles=${myprofiles[@]}
  206.  
  207.     write_list_start "Changing LAPACK implementations to $(highlight ${impl}) in"
  208.     echo "  ${libdirs}"
  209.     write_list_start "Affected language interfaces"
  210.     echo "  ${profiles}"
  211.     for libdir in ${libdirs} ; do
  212.         for prof in ${profiles} ; do
  213.             has ${prof} $(check_${impl} ${ROOT}/usr/${libdir}) || continue
  214.             setup_${impl} ${ROOT}/usr/${libdir} ${prof} \
  215.                 && store_config ${LAPACK_CONFIG} \
  216.                     "${prof}_${libdir}_CURRENT" ${impl} \
  217.                 || die "Please report this incident!"
  218.         done
  219.     done
  220. }
  221.  
  222. ### show action ###
  223.  
  224. describe_show() {
  225.     echo "Show the currently active LAPACK implementations"
  226. }
  227.  
  228. do_show() {
  229.     local libdirs=$(list_libdirs) profiles=${LAPACK_PROFILES} libdir lib prefix
  230.  
  231.     [[ -f ${LAPACK_CONFIG} ]] \
  232.         || eselect lapack scan
  233.  
  234.     [[ -n ${1} ]] && has ${1} ${libdirs} ${1} && libdirs=${1}
  235.     [[ -n ${2} ]] && has ${2} ${profiles} ${2} && profiles=${2}
  236.  
  237.     write_list_start "Active LAPACK implementations"
  238.     for libdir in ${libdirs} ; do
  239.         [[ ${#libdddirs} -eq 1 ]] || prefix="${ROOT}/usr/${libdir}"
  240.         for prof in ${profiles} ; do
  241.             [[ ${prof} == F77 ]] && lib=liblapack.so
  242.             impl=$(load_config ${LAPACK_CONFIG} "${prof}_${libdir}_CURRENT")
  243.             if [[ -z ${impl} ]] ; then
  244.                 [[ -n $(load_config ${LAPACK_CONFIG} "${prof}_${libdir}") ]] \
  245.                     && die -q "Configuration file is broken. Please run scan."
  246.             else
  247.                 if is_active_${impl} ${ROOT}/usr/${libdir}/${lib} ; then
  248.                     write_kv_list_entry "${prefix} (${prof})" "${impl} ($(package ${impl}))"
  249.                 else
  250.                     die -q "Configuration file is out of date. Please run scan."
  251.                 fi
  252.             fi
  253.         done
  254.     done
  255. }
  256.  
  257. ### update action ###
  258.  
  259. describe_scan() {
  260.     echo "Scans the system for data about all installed LAPACK implementations"
  261. }
  262.  
  263. do_scan() {
  264.     local lib libdir impl prof
  265.     [[ -e ${ROOT}/etc/eselect/lapack/lapack.config ]] \
  266.         && rm ${ROOT}/etc/eselect/lapack/lapack.config
  267.     for libdir in $(list_libdirs) ; do
  268.         [[ -d ${ROOT}/usr/${libdir} ]] \
  269.             && [[ ! -h ${ROOT}/usr/${libdir} ]] \
  270.             || continue
  271.         for impl in ${LAPACK_IMPLEMENTATIONS} ; do
  272.             for prof in $(check_${impl} ${ROOT}/usr/${libdir}/) ; do
  273.                 if has ${prof} ${LAPACK_PROFILES} ; then
  274.                     append_config ${LAPACK_CONFIG} "${prof}_${libdir}" ${impl}
  275.                     [[ ${prof} == F77 ]] && lib=${ROOT}/usr/${libdir}/liblapack.so
  276.                     is_active_${impl} ${lib} \
  277.                         && store_config ${LAPACK_CONFIG} \
  278.                             "${prof}_${libdir}_CURRENT" ${impl}
  279.                 else
  280.                     die -q "Unknown profile: \"${prof}\". Valid profiles: ${LAPACK_PROFILES}"
  281.                 fi
  282.             done
  283.         done
  284.     done
  285. }
  286.  
  287. # vim: set ft=eselect
  288.